package net.zjitc.datasource.book;

import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

/**
 * @Author Administrator
 * @Date 2020/5/26 14:01
 * 界面UI
 * 1、功能界面展示
 * 2、接受用户输入信息
 * 3、调用dao层的方法完成对应的功能
 *
 **/
public class Test {
    /* 定义用户输入对象，定义在类的内部方法的外面，想让不同的方法都使用同一个Scanner*/
    private static Scanner sc=new Scanner(System.in);
    private static BookDao dao=new BookDaoDB();

    public static void main(String[] args) {
        /* 循环、选择语句*/
        while (true){
            /* 展示功能选择界面
            *  根据用户的输入，进入不同的功能界面*/
            System.out.println("----欢迎光临---");
            System.out.println("1 添加图书");
            System.out.println("2 查询图书");
            System.out.println("3 更新图书");
            System.out.println("4 删除图书");
            System.out.println("5 退出");
            System.out.println("请输入你的选择：");
            /* 接受用户的输入
            *  自动创建变量 ctrl+alt+V */
            int c = sc.nextInt();
            /* 根据用户输入的数据，进入不同的界面*/
            switch (c){
                case 1:
                    /* 保存/添加功能界面*/
                    insertUI();
                    break;
                case 2:
                    /*查询功能界面*/
                    selectUI();
                    break;
                case 3:
                    updateUI();
                    break;
                case 4:
                    deleteUI();
                    break;
                case 5:
                    /* 结束整个项目*/
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入有误！");
                    break;
            }

        }
    }

    /**
     * 添加图书界面：
     * 1、展示添加界面
     * 2、接受用户输入的信息
     * 3、将用户输入的信息封装到对象中
     * 4、调用dao的方法完成添加功能
     */
    private static void insertUI() {
        System.out.println("---添加图书界面---");
        /* 方法内部给语句加注释： ctrl+shift+/
        * 给类或方法加注释： /** 回车键  */
        System.out.println("请输入图书名称：");
        /* 使用的是同一个Scanner对象，接受完int/double再接受String，
        *会出错，需要加一条语句处理*/
        sc.nextLine();
        String name = sc.nextLine();
        System.out.println("请输入出版社：");
        String press = sc.nextLine();
        System.out.println("请输入作者：");
        String author = sc.nextLine();
        System.out.println("请输入价格：");
        double price = sc.nextDouble();
        /* 把用户输入的数据封装到对象*/
        Book book=new Book(name,press,author,price);
        /* 调用dao方法真正实现添加/保存功能*/
        int i = dao.insert(book);
        if(i>0){
            System.out.println("保存成功");
        }else if(i==0){
            System.out.println("保存失败");
        }else{
            System.out.println("图书名称重复");
        }
    }

    private static void selectUI() {
        System.out.println("---查询图书界面---");
        /* 1、调用dao层方法得到所有图书集合
        *  2、展示图书内容（遍历集合）*/
        List<Book> books = dao.selectAll();
        if(books!=null){
            Iterator<Book> iterator = books.iterator();
            while (iterator.hasNext()){
                Book book = iterator.next();
                /* 直接输入book，实质是调用book.toString方法，所以要重写该方法*/
                System.out.println(book);
            }
        }
    }

    private static void updateUI() {
        System.out.println("---修改图书界面---");
        /* 1、接收用户输入图书名称
        *  2、调用dao方法判断该图书是否存在
        *     若存在：
        *        1）输出图书对象内容
        *        2）接收用户修改后的图书信息
        *        3）调用dao方法完成修改操作
        *        4）根据返回值，若返回0，提示更新失败
        *           否则提示更新成功
        *    若不存在：提示信息
        *      */
        System.out.println("请输入要修改的图书名称：");
        sc.nextLine();
        String name = sc.nextLine();
        Book book = dao.selectByName(name);
        if(book==null){
            System.out.println("您要修改的图书不存在！");
        }else{
            System.out.println(book);
            System.out.println("请输入修改后的图书名称：");
            String n = sc.nextLine();
            System.out.println("请输入修改后的出版社：");
            String press = sc.nextLine();
            System.out.println("请输入修改后的作者：");
            String author = sc.nextLine();
            System.out.println("请输入修改后的价格：");
            double price = sc.nextDouble();
            /* 将用户输入的修改后的内容 封装成新的Book对象newBook
            *  注意：id是不变的，记得要传入*/
            Book newBook=new Book(book.getId(),n,press,author,price);
            /* id不变，其他内容是用户新输入的，而不是book*/
            int i = dao.update(book.getId(), newBook);
            if(i>0){
                System.out.println("更新成功！");
            }else{
                System.out.println("更新失败！");
            }
        }

    }

    private static void deleteUI() {
        System.out.println("---删除图书界面---");
        /* 1、接收用户输入的要删除的图书名称
        *  2、调用dao方法判断图书是否存在
        *    若返回null,表示图书不存在，提示信息
        *    否则，表示图书存在，调用dao方法完成删除操作 */
        System.out.println("请输入要删除的图书名称：");
        sc.nextLine();
        String name = sc.nextLine();
        Book book = dao.selectByName(name);
        if(book==null){
            System.out.println("要删除的图书不存在！");
        }else{
            int i = dao.delete(book.getId());
            if(i>0){
                System.out.println("删除成功");
            }else{
                System.out.println("删除失败");
            }
        }

    }
}
